package com.microtf.inscription.metaweblog;

import com.microtf.inscription.metaweblog.vo.*;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

/**
 * MetaWeblog服务回调Listener
 *
 * @see MetaWebLogService
 * @see XmlRpcService
 * @author guliuzhong
 * @since 1.0
 */
public interface MetaWebLogListener {
    /**
     * 默认的xmlRcp服务器地址
     *
     * @return xmlRcp服务器地址
     */
    @SuppressWarnings("unused")
    default String getRequestUrl() {
        return "/xmlRpc";
    }

    /**
     * 服务器 主页地址
     *
     * @return 主页地址
     */
    @SuppressWarnings("unused")
    default String getHomePageUrl() {
        return "";
    }
    /**
     * 是否开启MetaWebLog服务
     *
     * @return bool 默认为不开启
     */
    default Boolean getEnable() {
        return false;
    }
    /**
     * 是否开启MetaWebLog服务
     *
     * @param user   当前用户
     * @return bool 默认为不开启
     */
    default List<Blog> getBlogs(@SuppressWarnings("unused") User user) {
        return Collections.emptyList();
    }
    /**
     * 编辑文章
     * <p>
     * POST内容保存后需要填充 postId字段。
     *
     *  @param blog  应用ID
     * @param post 客户端调用保存或新建时POST内容对象
     * @return 保存后的POST内容
     */
    default Post editPost(@SuppressWarnings("unused")Blog blog, @SuppressWarnings("unused") Post post) {
        throw new UnsupportedOperationException("未实现的操作");
    }

    /**
     * 获取近期POST的文章列表
     *
     * @param blog  应用ID
     * @param pageSize 获取文章数据
     * @param user   当前用户
     * @return 文章列表
     */
    default List<Post> getRecentPosts(@SuppressWarnings("unused") Blog blog,@SuppressWarnings("unused") int pageSize,@SuppressWarnings("unused") User user) {
        return Collections.emptyList();
    }

    /**
     * 获取指定POST内容
     *
     * @param postId 文章唯一ID
     * @param user   当前用户
     * @return POST对象
     */
    default Optional<Post> getPost(@SuppressWarnings("unused") String postId,@SuppressWarnings("unused") User user) {
        throw new UnsupportedOperationException("未实现的操作");
    }

    /**
     * 删除指定的文章
     *
     * @param postId 文章唯一ID
     * @param user   当前用户
     */
    default void deletePost(@SuppressWarnings("unused") String postId,@SuppressWarnings("unused") User user) {
        throw new UnsupportedOperationException("未实现的操作");
    }

    /**
     * 获取文章目录
     *
     * @param blog 应用ID
     * @param user   当前用户
     * @return 目录列表
     */
    default List<Category> getCategory(@SuppressWarnings("unused") Blog blog, @SuppressWarnings("unused") User user) {
        throw new UnsupportedOperationException("未实现的操作");
    }

    /**
     * 上传图片到服务器
     *
     * @param blog   应用Id
     * @param user     当前用户
     * @param fileData 文件
     * @return 上传服务器后url
     */
    default String newMediaObject(@SuppressWarnings("unused") Blog blog, @SuppressWarnings("unused") User user, @SuppressWarnings("unused") FileData fileData) {
        throw new UnsupportedOperationException("未实现的操作");
    }

    /**
     * 用户登录验证接口
     *
     * @param username 用户名
     * @param password 密码
     * @return 用户对象
     */
    default Optional<User> login(@SuppressWarnings("unused") String username, @SuppressWarnings("unused") String password) {
        return Optional.empty();
    }
}
